//package com.example.lock;
//
//import org.apache.commons.io.FileUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
//import org.springframework.stereotype.Component;
//import redis.clients.jedis.Jedis;
//
//import javax.annotation.Resource;
//import java.io.File;
//import java.io.IOException;
//import java.util.Arrays;
//import java.util.UUID;
//import java.util.concurrent.TimeUnit;
//import java.util.concurrent.locks.Condition;
//import java.util.concurrent.locks.Lock;
//
///**
// * @ClassName RedisLock
// * @Description TODO
// * @Author zhaoluowei
// * @Date 2019/8/3  14:58
// * @Version 1.0
// */
//@Component
//public class RedisLock implements Lock {
//
//    private static final String KEY = "key";
//
//    //获取redis连接池中的一个连接
//    @Autowired
//    private JedisConnectionFactory jedisConnectionFactory;
//
//    //线程级的变量
//    private ThreadLocal<String> threadLocal = new ThreadLocal<String>();
//
//    @Override
//    public void lock() {
//
//        //1尝试获取锁
//        if (tryLock()) {
//            return;
//        }
//
//        //2.获取失败阻塞一会
//        try {
//            Thread.sleep(10);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
//        //3.递归尝试获取锁
//        lock();
//    }
//
//
//    @Override
//    public boolean tryLock() {
//        //获取随机值
//        String uuid = UUID.randomUUID().toString();
//
//        Jedis jedis = (Jedis) jedisConnectionFactory.getConnection().getNativeConnection();
//
//        String set = jedis.set(KEY, uuid, "NX", "PX", 5000);
//
//        if ("OK".equals(set)) {
//
//            threadLocal.set(uuid);
//            return true;
//        }
//
//        return false;
//    }
//
//
//    @Override
//    public void unlock() {
////        FileUtils.readFileByLines("D:\\IdeaProjects\\distributed_transaction_demo\\src\\main\\resources\\unlock.lua");
//        try {
//            String script = FileUtils.readFileToString(new File("D:/IdeaProjects/distributed_transaction_demo/src/main/resources/unlock.lua"), "utf-8");
//            System.out.println(script);
//
//            Jedis jedis = (Jedis) jedisConnectionFactory.getConnection().getNativeConnection();
//            //链接redis执行Lua脚本,value值无法从unlock方法入参了，因此用threadLocal来获取
//            //两个变量以数组的方式进行传递
//            jedis.eval(script, Arrays.asList(KEY),Arrays.asList(threadLocal.get()));
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//    @Override
//    public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
//        return false;
//    }
//
//    @Override
//    public void lockInterruptibly() throws InterruptedException {
//
//    }
//
//    @Override
//    public Condition newCondition() {
//        return null;
//    }
//}
